package com.ruoyi.common.core.domain.entity;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;


/**
 * 角色表 sys_role
 */
@Data
public class SysRole extends BaseEntity<SysRole> {
    private static final long serialVersionUID = 1L;

    /**
     * 角色ID
     */
    @TableId
    private Long roleId;

    /**
     * 角色名称
     */
    private String roleName;


    /**
     * 部门id
     */
    private Long deptId;
    /**
     * 创建人用户编号
     */
    private Long userId;

    /**
     * 祖级列表
     */
    private String deptAncestors;
    /**
     * 部门名称
     */
    private String deptName;

    /**
     * 待办配置id,多个用,隔开
     */
    private String todoDict;
    @TableField(exist = false)
    private List<String> todoDictList;

    /**
     * 角色权限
     */
    private String roleKey;

    /**
     * 角色排序
     */
    private Integer roleSort;

    /**
     * 权限
     * <el-option label="自己创建的数据" value="1" />
     * <el-option label="本部门数据" value="2" />
     * <el-option label="本部门及以下数据" value="3" />
     * <el-option label="所在机构的数据" value="4" />
     * <el-option label="所有数据" value="5" />
     */
    private String dataScope;

    /**
     * 菜单树选择项是否关联显示（ 0：父子不互相关联显示 1：父子互相关联显示）
     */
    @TableField(value = "menu_check_strictly")
    private Boolean menuCheckStrictly;

    /**
     * 部门树选择项是否关联显示（0：父子不互相关联显示 1：父子互相关联显示 ）
     */
    @TableField(value = "dept_check_strictly")
    private Boolean deptCheckStrictly;

    /**
     * 角色状态（0正常 1停用）
     */
    private String status;

    /**
     * 删除标志（1代表删除 0代表存在）
     */
    @TableField(value = "is_del")
    private Boolean del;

    /**
     * 是否内置
     */
    @TableField(value = "is_built_in")
    private Boolean built_in;
    /**
     * 用户类型（00系统用户）
     */
    private String userType;
    /**
     * 用户是否存在此角色标识 默认不存在
     */
    @TableField(exist = false)
    private Boolean flag = false;


    /**
     * 菜单组
     */
    @TableField(exist = false)
    private Long[] menuIds;

    /**
     * 部门组（数据权限）
     */
    @TableField(exist = false)
    private Long[] deptIds;

    /**
     * 角色菜单权限
     */
    @TableField(exist = false)
    private Set<String> permissions;


    private String createBy;

    private String updateBy;
    private String remark;
    /**
     * 采购方id
     */
    private Long enterpriseId;

    /**
     * 供应商id
     */
    private Long supplierId;

    public List<String> getTodoDictList() {
        if ((todoDictList == null || todoDictList.size() == 0) && StrUtil.isNotBlank(todoDict)) {
            this.todoDictList = StrUtil.split(todoDict, ",");
        } else if (this.todoDictList == null) {
            this.todoDictList = new ArrayList<>();
        }
        return todoDictList;
    }

    public void setTodoDictList(List<String> todoDictList) {
        if (todoDictList != null && todoDictList.size() > 0 && StrUtil.isBlank(this.todoDict)) {
            this.todoDict = StrUtil.join(",", todoDictList);
            this.todoDictList = todoDictList;
        }

    }

    public SysRole() {

    }

    public SysRole(Long roleId) {
        this.roleId = roleId;
    }

    public boolean isAdmin() {
        return isAdmin(this.roleKey);
    }

    public static boolean isAdmin(String roleKey) {
        return roleKey != null && "admin".equals(roleKey);
    }

}
